package com.thunbu.lib_common.utils

import android.content.Context
import android.os.Build
import android.provider.Settings
import android.util.DisplayMetrics
import android.view.WindowManager

/**
 * @类名:ScreenUtils * @类描述:屏幕工具类 * @修改人: * @修改时间: * @修改备注: * @版本:
 */
object ScreenUtils {
    /**
     * * @方法说明:获取DisplayMetrics对象 * @方法名称:getDisPlayMetrics * @param context * @return
     * * @返回值:DisplayMetrics
     */
    fun getDisPlayMetrics(context: Context?): DisplayMetrics {
        val metric = DisplayMetrics()
        if (null != context) {
            val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
            windowManager.defaultDisplay.getMetrics(metric)
        }
        return metric
    }

    /**
     * * @方法说明:获取屏幕的宽度（像素） * @方法名称:getScreenWidth * @param context * @return *
     *
     * @返回值:int
     */
    fun getScreenWidth(context: Context?): Int {
        return getDisPlayMetrics(context).widthPixels
    }

    /**
     * * @方法说明:获取屏幕的高（像素） * @方法名称:getScreenHeight * @param context * @return *
     *
     * @返回值:int
     */
    fun getScreenHeight(context: Context): Int {
        var height = getDisPlayMetrics(context).heightPixels
        if (DeviceUtil.isMIUI) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1
                    && Settings.Global.getInt(context.contentResolver, "force_fsg_nav_bar", 0) == 0) {
                //如果虚拟按键已经显示，则不需要补充高度
            } else {
                //如果虚拟按键没有显示，则需要补充虚拟按键高度到屏幕高度
                val res = context.resources
                val resourceId = res.getIdentifier("navigation_bar_height", "dimen", "android")
                if (resourceId > 0) {
                    height += res.getDimensionPixelSize(resourceId)
                }
            }
        }
        return height
    }

    /**
     * * @方法说明:屏幕密度(0.75 / 1.0 / 1.5) * @方法名称:getDensity * @param context * @return
     * * @返回 float
     */
    fun getDensity(context: Context?): Float {
        return getDisPlayMetrics(context).density
    }

    /**
     * * @方法说明:屏幕密度DPI(120 / 160 / 240) * @方法名称:getDensityDpi * @param context * @return
     * * @返回 int
     */
    fun getDensityDpi(context: Context?): Int {
        return getDisPlayMetrics(context).densityDpi
    }

    fun px2dp(context: Context?, pxValue: Float): Int {
        val scale = getDensity(context)
        return (pxValue / scale + 0.5f).toInt()
    }

    fun dp2px(context: Context?, dpValue: Float): Int {
        val scale = getDensity(context)
        return (dpValue * scale + 0.5f).toInt()
    }

    fun getStatusBarHeight(activity: Context): Int {
        var result = 0
        val resourceId = activity.resources.getIdentifier("status_bar_height", "dimen", "android")
        if (resourceId > 0) {
            result = activity.resources.getDimensionPixelSize(resourceId)
        }
        return result
    }
}